namespace ext.dd
{
	using System;
	using System.Runtime.CompilerServices;
	using System.Html;
	using System.Collections;
	
	
	/// <summary>
	/// This class provides a container DD instance that allows dragging of multiple child source nodes.  This class does not move the drag target nodes, but a proxy element which may contain
	/// any DOM structure you wish. The DOM element to show in the proxy is provided by either a
	/// provided implementation of {@link #getDragData}, or by registered draggables registered with {@link Ext.dd.Registry}  If you wish to provide draggability for an arbitrary number of DOM nodes, each of which represent some
	/// application object (For example nodes in a {@link Ext.DataView DataView}) then use of this class
	/// is the most efficient way to &quot;activate&quot; those nodes.  By default, this class requires that draggable child nodes are registered with {@link Ext.dd.Registry}.
	/// However a simpler way to allow a DragZone to manage any number of draggable elements is to configure
	/// the DragZone with an implementation of the {@link #getDragData} method which interrogates the passed
	/// mouse event to see if it has taken...
	/// </summary>
	/// <htmlSummary>
	/// &lt;p&gt;This class provides a container DD instance that allows dragging of multiple child source nodes.&lt;/p&gt;
	/// &lt;p&gt;This class does not move the drag target nodes, but a proxy element which may contain
	/// any DOM structure you wish. The DOM element to show in the proxy is provided by either a
	/// provided implementation of {@link #getDragData}, or by registered draggables registered with {@link Ext.dd.Registry}&lt;/p&gt;
	/// &lt;p&gt;If you wish to provide draggability for an arbitrary number of DOM nodes, each of which represent some
	/// application object (For example nodes in a {@link Ext.DataView DataView}) then use of this class
	/// is the most efficient way to &quot;activate&quot; those nodes.&lt;/p&gt;
	/// &lt;p&gt;By default, this class requires that draggable child nodes are registered with {@link Ext.dd.Registry}.
	/// However a simpler way to allow a DragZone to manage any number of draggable elements is to configure
	/// the DragZone with an implementation of the {@link #getDragData} method which interrogates the passed
	/// mouse event to see if it has taken place within an element, or class of elements. This is easily done
	/// by using the event&apos;s {@link Ext.EventObject#getTarget getTarget} method to identify a node based on a
	/// {@link Ext.DomQuery} selector. For example, to make the nodes of a DataView draggable, use the following
	/// technique. Knowledge of the use of the DataView is required:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;
	/// myDataView.on(&apos;render&apos;, function(v) {
	/// myDataView.dragZone = new Ext.dd.DragZone(v.getEl(), {
	///
	/// // On receipt of a mousedown event, see if it is within a DataView node.
	/// // Return a drag data object if so.
	/// getDragData: function(e) {
	///
	/// // Use the DataView&apos;s own itemSelector (a mandatory property) to
	/// // test if the mousedown is within one of the DataView&apos;s nodes.
	/// var sourceEl = e.getTarget(v.itemSelector, 10);
	///
	/// // If the mousedown is within a DataView node, clone the node to produce
	/// // a ddel element for use by the drag proxy. Also add application data
	/// // to the returned data object.
	/// if (sourceEl) {
	/// d = sourceEl.cloneNode(true);
	/// d.id = Ext.id();
	/// return {
	/// ddel: d,
	/// sourceEl: sourceEl,
	/// repairXY: Ext.fly(sourceEl).getXY(),
	/// sourceStore: v.store,
	/// draggedRecord: v.{@link Ext.DataView#getRecord getRecord}(sourceEl)
	/// }
	/// }
	/// },
	///
	/// // Provide coordinates for the proxy to slide back to on failed drag.
	/// // This is the original XY coordinates of the draggable element captured
	/// // in the getDragData method.
	/// getRepairXY: function() {
	/// return this.dragData.repairXY;
	/// }
	/// });
	/// });&lt;/code&gt;&lt;/pre&gt;
	/// See the {@link Ext.dd.DropZone DropZone} documentation for details about building a DropZone which
	/// cooperates with this DragZone.
	/// </htmlSummary>
	/// <definedin>src\dd\DragZone.js</definedin>
	[ScriptName("DragZone")]
	[ScriptNamespace("Ext.dd")]
	[Imported()]
	public partial class DragZone : ext.dd.DragSource
	{
		
		#region Constructors
		/// <summary>Constructor</summary>
		/// <param name="el">The container element</param>
		/// <param name="config"></param>
		public DragZone(object el, ext.dd.DragZone_Configuration config)
		{
		}
		
		/// <summary>Constructor</summary>
		public DragZone()
		{
		}
		#endregion
		
		#region Fields
		/// <summary>
		/// True to register this container with the Scrollmanager
		/// for auto scrolling during drag operations.
		/// </summary>
		/// <definedin>src\dd\DragZone.js</definedin>
		[ScriptName("containerScroll")]
		public bool ContainerScroll;
		
		/// <summary>
		/// The color to use when visually highlighting the drag source in the afterRepair
		/// method after a failed drop (defaults to &quot;c3daf9&quot; - light blue)
		/// </summary>
		/// <definedin>src\dd\DragZone.js</definedin>
		[ScriptName("hlColor")]
		public string HlColor;
		#endregion
		
		#region Properties
		/// <summary>
		/// This property contains the data representing the dragged object. This data is set up by the implementation
		/// of the {@link #getDragData} method. It must contain a ddel property, but can contain
		/// any other data according to the application&apos;s needs.
		/// </summary>
		/// <htmlSummary>
		/// This property contains the data representing the dragged object. This data is set up by the implementation
		/// of the {@link #getDragData} method. It must contain a &lt;tt&gt;ddel&lt;/tt&gt; property, but can contain
		/// any other data according to the application&apos;s needs.
		/// </htmlSummary>
		/// <definedin>src\dd\DragZone.js</definedin>
		[ScriptName("dragData")]
		[IntrinsicProperty()]
		public object DragData
		{
			get
			{
				throw new System.Exception("Imported - not implemented");
			}
			set
			{
			}
		}
		#endregion
		
		#region Methods
		/// <summary>
		/// Called when a mousedown occurs in this container. Looks in {@link Ext.dd.Registry}
		/// for a valid target to drag based on the mouse down. Override this method
		/// to provide your own lookup logic (e.g. finding a child by class name). Make sure your returned
		/// object has a &quot;ddel&quot; attribute (with an HTML Element) for other functions to work.
		/// </summary>
		/// <definedin>src\dd\DragZone.js</definedin>
		/// <param name="e">The mouse down event</param>
		/// <returns>The dragData</returns>
		[ScriptName("getDragData")]
		public object GetDragData(ext.EventObject e)
		{
			throw new System.Exception("Imported - not implemented");
		}
		
		/// <summary>
		/// Called once drag threshold has been reached to initialize the proxy element. By default, it clones the
		/// this.dragData.ddel
		/// </summary>
		/// <definedin>src\dd\DragZone.js</definedin>
		/// <param name="x">The x position of the click on the dragged object</param>
		/// <param name="y">The y position of the click on the dragged object</param>
		/// <returns>true to continue the drag, false to cancel</returns>
		[ScriptName("onInitDrag")]
		public bool OnInitDrag(System.Number x, System.Number y)
		{
			throw new System.Exception("Imported - not implemented");
		}
		
		/// <summary>Called after a repair of an invalid drop. By default, highlights this.dragData.ddel</summary>
		/// <definedin>src\dd\DragZone.js</definedin>
		[ScriptName("afterRepair")]
		public void AfterRepair()
		{
			throw new System.Exception("Imported - not implemented");
		}
		
		/// <summary>
		/// Called before a repair of an invalid drop to get the XY to animate to. By default returns
		/// the XY of this.dragData.ddel
		/// </summary>
		/// <definedin>src\dd\DragZone.js</definedin>
		/// <param name="e">The mouse up event</param>
		/// <returns>The xy location (e.g. [100, 200])</returns>
		[ScriptName("getRepairXY")]
		public System.Array GetRepairXY(ext.EventObject e)
		{
			throw new System.Exception("Imported - not implemented");
		}
		#endregion
	}
}
